
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.IOException;
import java.io.PrintWriter;

public class Seccion {
	
	private String numero;
	private Profesor prof = new Profesor();
	private Vector<Alumno> vectorPrincipal = new Vector<Alumno>();
	private Vector<Alumno> vectorReprobados = new Vector<Alumno>();
	private Vector<Alumno> vectorAprobados = new Vector<Alumno>();
	private Vector<Alumno> vectorNotaFinal = new Vector<Alumno>();
	private boolean encontrado;
	private boolean evaluacionAplicada;
	private int posicion;
	private double promedio;
	private double rendimiento;
	
	public int getPosicion() {
		return posicion;
	}


	public void setPosicion(int posicion) {
		this.posicion = posicion;
	}


	public boolean isEvaluacionAplicada() {
		return evaluacionAplicada;
	}


	public boolean validarInscritos(){
		if(this.vectorPrincipal.size() == 0){
			encontrado = false;
		}
		else {
			encontrado = true;
		}
		return encontrado;
	}
	
	public boolean compararProfesorAlumno(String cedulaAlumno, String cedulaProfesor){
		
		int cedulaAlumnoProbar = Integer.parseInt(cedulaAlumno);
		int cedulaProfesorComparar = Integer.parseInt(cedulaProfesor);
		if(cedulaAlumnoProbar == cedulaProfesorComparar){
			return true;
		}
		else{
			return false;
		}
	}
	
	public boolean validarEntradaLetras(String datoEntrada){
		Pattern patron = Pattern.compile("[^A-Za-z^ ]"); 
		Matcher encaja = patron.matcher(datoEntrada);
		if(!encaja.find())
			return true;
		else
			return false;
		
	}
	
	public boolean validarEntradaSeccion(String datoEntrada){
		Pattern patron = Pattern.compile("[^A-Z^0-9^-]"); 
		Matcher encaja = patron.matcher(datoEntrada);
		if(!encaja.find())
			return true;
		else
			return false;
		
	}

	public boolean validarNumeros(String datoEntrada){
		try{
			Integer.parseInt(datoEntrada);
			return true;
		}
		catch(NumberFormatException nfe){
			return false;
		}
	}
	

	public boolean isEncontrado() {
		return encontrado;
	}


	public void setEncontrado(boolean encontrado) {
		this.encontrado = encontrado;
	}
	
	

	public Seccion(String numero) {
		super();
		this.numero = numero;
	}
	
	
	public Seccion() {
		// TODO Auto-generated constructor stub
	}

	
	public  void inscribirEstudiante(Alumno estudiante){
		this.vectorPrincipal.addElement(estudiante);
		System.out.println("Hay "+vectorPrincipal.size()+" estudiantes inscritos");
		
	}
	
	
	public void retirarEstudiante(String cedulaEtudiante){
		int i = 0;
		this.encontrado = false;
		
		
		
		while((this.encontrado != true) && (i < vectorPrincipal.size())){
			if(cedulaEtudiante.equals(vectorPrincipal.elementAt(i).getCI())){
				this.encontrado = true;
				vectorPrincipal.removeElementAt(i);
				System.out.println("Quedan "+vectorPrincipal.size()+" estudiantes registrados");
			}
			else {
				this.encontrado = false;
				
			}
			i++;
		}
	}
	
	
	public boolean busquedaCi(String cedulaBusqueda){
		int i = 0;
		this.encontrado = false;
		
		while((this.encontrado != true) && (i < vectorPrincipal.size())){
				
			if (vectorPrincipal.elementAt(i).getCI().equals(cedulaBusqueda)){
				
				
				System.out.println("Estudiante encontrado");
				System.out.println("Cédula: "+vectorPrincipal.elementAt(i).getCI());
				System.out.println("Nombre: "+vectorPrincipal.elementAt(i).getNom());
				System.out.println("Apellido: "+vectorPrincipal.elementAt(i).getApe());
				this.posicion = i;
				this.encontrado = true;
			}
			else {
				
				this.encontrado = false;
				
			}
			i++;
		}
		return encontrado;
		
		
		
	}
	
	


	public void AplicarEvaluacion(){
		
		int i = 0;
		while( i < this.vectorPrincipal.size()){
			
			this.vectorPrincipal.elementAt(i).presentarExamen();
			prof.evaluarEstudiante(this.vectorPrincipal.elementAt(i));
			i++;
		}//end while
		this.evaluacionAplicada = true;
		
	}
	
	public void calcularPromedio(){
		
		
		double acumulador = 0;
		
		int contador = 0;
		int i=0;
		while(i < this.vectorPrincipal.size()){
			acumulador = acumulador + this.vectorPrincipal.elementAt(i).getNotaFinal();
			contador++;
			i++;
		}
		this.promedio = acumulador / contador;
		this.rendimiento = promedio*100 /20;
		System.out.println("El promedio de notas de la sección es: "+Math.rint(promedio*100/100.0)+" puntos");
		System.out.println("                                                                             ");
		System.out.println("El rendimiento de la sección es de: "+Math.rint(rendimiento*100/100.0)+"%");
	}
	
	public void listadoReprobado(Seccion sec, Profesor profe){
		int i = 0;
		int e = 0;
		double porcentajeReprobado;
		int contadorReprobado= 0;
		while(i < this.vectorPrincipal.size()){
			if(this.vectorPrincipal.elementAt(i).getStatus() == "Reprobado"){
				this.vectorReprobados.addElement(this.vectorPrincipal.elementAt(i));
				contadorReprobado++;
			}			
			i++;
		}
		
		porcentajeReprobado = contadorReprobado * 100 / this.vectorPrincipal.size();
		try {
			PrintWriter escritura = new PrintWriter ("reprobado");
			escritura.println("-----------------------------------------------------------");
			System.out.println("-----------------------------------------------------------");
			escritura.println("----------- Listado de Estudiantes Reprobados -------------");
			System.out.println("----------- Listado de Estudiantes Reprobados -------------");
			escritura.println("-----------------------------------------------------------");
			System.out.println("-----------------------------------------------------------");
			escritura.println(" ");
			System.out.println(" ");
			escritura.println("Numero de la Seccion: "+sec.getNumero());
			escritura.println("Profesor: ("+profe.getTitulo()+") "+profe.getNom()+" "+profe.getApe()+" CI: "+profe.getCI());
			escritura.println("--------------------------------------------------------------------------------------------------------");
			escritura.println("La sección tiene: "+this.vectorReprobados.size()+" estudiante(s) reprobado(s)");
			System.out.println("La sección tiene: "+this.vectorReprobados.size()+" estudiante(s) reprobado(s)");
			escritura.println("El "+Math.rint(porcentajeReprobado*100/100.0)+" % de la sección está en condición de REPROBADO");
			System.out.println("El "+Math.rint(porcentajeReprobado*100/100.0)+" % de la sección está en condición de REPROBADO");
			escritura.println(" ");
			System.out.println(" ");
			while(e < this.vectorReprobados.size()){
				escritura.println("Cédula: "+this.vectorReprobados.elementAt(e).getCI());
				System.out.println("Cédula: "+this.vectorReprobados.elementAt(e).getCI());
				escritura.println("Nombre: "+this.vectorReprobados.elementAt(e).getNom());
				System.out.println("Nombre: "+this.vectorReprobados.elementAt(e).getNom());
				escritura.println("Apellido: "+this.vectorReprobados.elementAt(e).getApe());
				System.out.println("Apellido: "+this.vectorReprobados.elementAt(e).getApe());
				escritura.println("Nota Final: "+this.vectorReprobados.elementAt(e).getNotaFinal());
				System.out.println("Nota Final: "+this.vectorReprobados.elementAt(e).getNotaFinal());
				escritura.println("------------------------------------------------------------");
				System.out.println("-----------------------------------------------------------");
				e++;
			}
			escritura.close();
			
			//this.vectorReprobados.removeAllElements();

			
		}
		catch (IOException ex) {
			System.out.println("ATENCION: Se produjo un error en el archivo");
		}
		
}
	
	public void listadoAprobado(Seccion sec, Profesor profe){
		int i = 0;
		int e = 0;
		double porcentajeAprobado;
		int contadorAprobado= 0;
		while(i < this.vectorPrincipal.size()){
			if(this.vectorPrincipal.elementAt(i).getStatus() == "Aprobado"){
				this.vectorAprobados.addElement(this.vectorPrincipal.elementAt(i));
				contadorAprobado++;
			}			
			i++;
		}
		porcentajeAprobado = contadorAprobado * 100 / this.vectorPrincipal.size();
		
		try {
			PrintWriter escritura = new PrintWriter ("aprobado");
			escritura.println("----------------------------------------------------------");
			System.out.println("----------------------------------------------------------");
			escritura.println("----------- Listado de Estudiantes Aprobados -------------");
			System.out.println("----------- Listado de Estudiantes Aprobados -------------");
			escritura.println("----------------------------------------------------------");
			System.out.println("----------------------------------------------------------");
			escritura.println(" ");
			System.out.println(" ");
			escritura.println("Numero de la Seccion: "+sec.getNumero());
			escritura.println("Profesor: ("+profe.getTitulo()+") "+profe.getNom()+" "+profe.getApe()+" CI: "+profe.getCI());
			escritura.println("--------------------------------------------------------------------------------------------------------");
			escritura.println("La sección tiene: "+this.vectorAprobados.size()+" estudiante(s) aprobado(s)");
			System.out.println("La sección tiene: "+this.vectorAprobados.size()+" estudiante(s) aprobado(s)");
			escritura.println("El "+Math.rint(porcentajeAprobado*100/100.0)+" % de la sección está en condición de APROBADO");
			System.out.println("El "+Math.rint(porcentajeAprobado*100/100.0)+" % de la sección está en condición de APROBADO");
			escritura.println(" ");
			System.out.println(" ");
			while(e < this.vectorAprobados.size()){
				escritura.println("Cédula: "+this.vectorAprobados.elementAt(e).getCI());
				System.out.println("Cédula: "+this.vectorAprobados.elementAt(e).getCI());
				escritura.println("Nombre: "+this.vectorAprobados.elementAt(e).getNom());
				System.out.println("Nombre: "+this.vectorAprobados.elementAt(e).getNom());
				escritura.println("Apellido: "+this.vectorAprobados.elementAt(e).getApe());
				System.out.println("Apellido: "+this.vectorAprobados.elementAt(e).getApe());
				escritura.println("Nota Final: "+this.vectorAprobados.elementAt(e).getNotaFinal());
				System.out.println("Nota Final: "+this.vectorAprobados.elementAt(e).getNotaFinal());
				escritura.println("------------------------------------------------------------");
				System.out.println("-----------------------------------------------------------");
				e++;
			}
			escritura.close();
			
			//this.vectorAprobados.removeAllElements();

			
		}
		catch (IOException ex) {
			System.out.println("ATENCION: Se produjo un error en el archivo");
		}
		
		
	}
	
	public Vector<Alumno> ordenadosCedula(Seccion sec, Profesor profe){
			int e = 0;
		int cedulaEntero;
		int cedulaEntero2;
		Alumno auxiliar;
		Alumno primero;
		Alumno segundo;
		
		for(int j = 0; j < this.vectorPrincipal.size() - 1; j++){
			for(int i = 0; i < this.vectorPrincipal.size() - 1; i++){
				cedulaEntero = Integer.parseInt(this.vectorPrincipal.elementAt(i).getCI());
				cedulaEntero2 = Integer.parseInt(this.vectorPrincipal.elementAt(i+1).getCI());
				if(cedulaEntero < cedulaEntero2){
					primero = this.vectorPrincipal.elementAt(i);
					segundo = this.vectorPrincipal.elementAt(i+1);
					auxiliar = segundo;
					this.vectorPrincipal.setElementAt(primero, i+1);
					this.vectorPrincipal.setElementAt(auxiliar, i);
				}
			}
		}
		
		try {
			PrintWriter escritura = new PrintWriter ("ordenadocedula");
			escritura.println("------------------------------------------------------------------------");
			System.out.println("------------------------------------------------------------------------");
			escritura.println("----------- Listado de Estudiantes por Cédula de Identidad -------------");
			System.out.println("----------- Listado de Estudiantes por Cédula de Identidad -------------");
			escritura.println("------------------------------------------------------------------------");
			System.out.println("------------------------------------------------------------------------");
			escritura.println(" ");
			System.out.println(" ");
			escritura.println("Numero de la Seccion: "+sec.getNumero());
			escritura.println("Profesor: ("+profe.getTitulo()+") "+profe.getNom()+" "+profe.getApe()+" CI: "+profe.getCI());
			escritura.println("--------------------------------------------------------------------------------------------------------");
			escritura.println("La sección tiene: "+this.vectorPrincipal.size()+" estudiante(s) inscrito(s)");
			System.out.println("La sección tiene: "+this.vectorPrincipal.size()+" estudiante(s) inscrito(s)");
			escritura.println(" ");
			System.out.println(" ");
			while(e < this.vectorPrincipal.size()){
				escritura.println("Cédula: "+this.vectorPrincipal.elementAt(e).getCI());
				System.out.println("Cédula: "+this.vectorPrincipal.elementAt(e).getCI());
				escritura.println("Nombre: "+this.vectorPrincipal.elementAt(e).getNom());
				System.out.println("Nombre: "+this.vectorPrincipal.elementAt(e).getNom());
				escritura.println("Apellido: "+this.vectorPrincipal.elementAt(e).getApe());
				System.out.println("Apellido: "+this.vectorPrincipal.elementAt(e).getApe());
				escritura.println("------------------------------------------------------------");
				System.out.println("-----------------------------------------------------------");
				e++;
			}
			escritura.close();
		}
			catch(IOException ex){
				System.out.println("ATENCIÓN: Se produjo un error");
			}
		return vectorPrincipal;
		
	}
	
	
public void ordenadosNotaFinal(Seccion sec, Profesor profe){
		
		int e = 0;
		Alumno notaAuxiliar;
		Alumno primero;
		Alumno segundo;
		
		this.vectorNotaFinal = this.vectorPrincipal;
		for(int j = 0; j < this.vectorNotaFinal.size() - 1; j++){
			for(int i = 0; i < this.vectorNotaFinal.size() - 1; i++){
				if(this.vectorNotaFinal.elementAt(i).getNotaFinal() > this.vectorNotaFinal.elementAt(i+1).getNotaFinal()){
					primero = this.vectorNotaFinal.elementAt(i);
					segundo = this.vectorNotaFinal.elementAt(i+1);
					notaAuxiliar = segundo;
					this.vectorNotaFinal.setElementAt(primero, i+1);
					this.vectorNotaFinal.setElementAt(notaAuxiliar, i);
					}
			}
		}
		
		try {
			PrintWriter escritura = new PrintWriter ("ordenadonotafinal");
			escritura.println("------------------------------------------------------------------");
			System.out.println("------------------------------------------------------------------");
			escritura.println("----------- Listado de Estudiantes por su Nota Final -------------");
			System.out.println("----------- Listado de Estudiantes por su Nota Final -------------");
			escritura.println("------------------------------------------------------------------");
			System.out.println("------------------------------------------------------------------");
			escritura.println(" ");
			System.out.println(" ");
			escritura.println("Numero de la Seccion: "+sec.getNumero());
			escritura.println("Profesor: ("+profe.getTitulo()+") "+profe.getNom()+" "+profe.getApe()+" CI: "+profe.getCI());
			escritura.println("--------------------------------------------------------------------------------------------------------");
			escritura.println("La sección tiene: "+this.vectorNotaFinal.size()+" estudiante(s) inscrito(s)");
			System.out.println("La sección tiene: "+this.vectorNotaFinal.size()+" estudiante(s) inscrito(s)");
			escritura.println(" ");
			System.out.println(" ");
			while(e < this.vectorNotaFinal.size()){
				escritura.println("Cédula: "+this.vectorNotaFinal.elementAt(e).getCI());
				System.out.println("Cédula: "+this.vectorNotaFinal.elementAt(e).getCI());
				escritura.println("Nombre: "+this.vectorNotaFinal.elementAt(e).getNom());
				System.out.println("Nombre: "+this.vectorNotaFinal.elementAt(e).getNom());
				escritura.println("Apellido: "+this.vectorNotaFinal.elementAt(e).getApe());
				System.out.println("Apellido: "+this.vectorNotaFinal.elementAt(e).getApe());
				escritura.println("Nota Final: "+this.vectorNotaFinal.elementAt(e).getNotaFinal());
				System.out.println("Nota Final: "+this.vectorNotaFinal.elementAt(e).getNotaFinal());
				escritura.println("------------------------------------------------------------");
				System.out.println("-----------------------------------------------------------");
				e++;
			}
			escritura.close();
		}
			catch(IOException ex){
				System.out.println("ATENCIÓN: Se produjo un error");
			}
		
		
	}
	
	
	
	public void setNumero(String num) {
		this.numero = num;
	}

	public String getNumero() {
		return numero;
	}


	public Vector<Alumno> getVectorPrincipal() {
		return vectorPrincipal;
	}


	public void setVectorPrincipal(Vector<Alumno> vectorPrincipal) {
		this.vectorPrincipal = vectorPrincipal;
	}


	public double getPromedio() {
		return promedio;
	}


	public double getRendimiento() {
		return rendimiento;
	}


	public Vector<Alumno> getVectorReprobados() {
		return vectorReprobados;
	}


	public void setVectorReprobados(Vector<Alumno> vectorReprobados) {
		this.vectorReprobados = vectorReprobados;
	}


	public Vector<Alumno> getVectorAprobados() {
		return vectorAprobados;
	}


	public void setVectorAprobados(Vector<Alumno> vectorAprobados) {
		this.vectorAprobados = vectorAprobados;
	}


	public Vector<Alumno> getVectorNotaFinal() {
		return vectorNotaFinal;
	}


	public void setVectorNotaFinal(Vector<Alumno> vectorNotaFinal) {
		this.vectorNotaFinal = vectorNotaFinal;
	}
		
	
}
